/*File Name		: Calendar.h*/
/*Date			: 11-11-2012 */
/*Maker Name	: Jonathan Ery Pradana / 23512038 ; M.Ghufron Mahfudhi / 23512066*/
/* Definisi Class Calendar */

#ifndef _CALENDAR_H
#define _CALENDAR_H

#include <list>
#include <fstream>

#include "../File/File.h"
#include "../Event/Event.h"

class Calendar : public File{
	private:
		string Name;			//Nama kalender
		list<Event> EventList;	//Data Event dalam kalender
	public:
		/** 4 sekawan **/
		Calendar();
		/* Constructor: membuat kalender default */
		Calendar(string, list<Event>);
		/* Constructor: membuat kalender dengan parameter yang terdefinisi */
		Calendar(const Calendar&);
		/* Copy constructor: membuat kalender dari kalender yang sudah ada */
		Calendar& operator=(const Calendar&);
		/* Overload operator = */
		~Calendar();
		/* Destructor */
		
		/** Getter & Setter **/
		string GetName();
		/* Mengembalikan Name kalender */
		list<Event> GetEventList();
		/* Mengembalikan daftar event dalam kalender */
		
		void SetName(const string&);
		/* Mengubah Nama kalender sesuai parameter */
		void SetEventList(const list<Event>&);
		/* Mengubah event dalam kalender dengan event parameter */
		
		/** Method **/
		void AddEvent(Event);
		/* Proses: menambahkan E dalam Calendar */
		/* I.S. EventList mungkin kosong */
		/* F.S. E ditambahkan ke dalam EventList */
		void DelEvent(int);
		/* Proses: Menghapus Event dengan nomor entryNo */
		/* I.S. Calendar tidak mungkin kosong */
		/* F.S. Event dengan eNum=entryNo terhapus */
		void ViewEvent(int);
		/* Proses : Menampilkan event dengan nomor sesuai parameter */
		/* I.S. Calender tidak mungkin kosong*/
		/* F.S. Event dengan nomor eventId tampil di layar*/
		void ViewCal();
		/* Proses: Menampilkan semua event di dalam C */
		/* I.S. C mungkin kosong */
		/* F.S. Semua event tampil di layar dalam bentuk list of event */
		void SortCal();
		/* Proses: Menyortir List Event dalam kalender berdasarkan waktunya */
		/* I.S. Calendar mungkin kosong */
		/* F.S. List Event dalam Calendar terurut berdasarkan waktu */
		void DeleteCal();
		/* Proses: Menghapus semua Event dalam Calendar */
		/* I.S. Calendar mungkin kosong */
		/* F.S. Semua Event dalam Calendar terhapus */
		
		/** Override Method **/
		void ReadFile(string);
		/* Proses : Membaca file dari NamaFile, kemudian menyimpan isinya ke Calendar */ 
		/* I.S : Calendar telah dibuat, NamaFile terfdefinisi, format isinya sesuai */
		/* F.S : Calendar terisi data yang berasal dari NamaFile */
		void SaveFile(string);
		/* Proses : Menuliskan elemen-elemen Calendar ke dalam File NamaFile */
		/* I.S	: NamaFile terdefinisi, Calendar berisi event yang akan dituliskan ke file */
		/* F.S	: File yang bernama NamaFile terbentuk, dan berisi elemen Calendar */
};

#endif
